package 继承;


	/*
	 * 关于继承
	 * 
	 * 1.抽取所有类共同特征，组建一个父类，所有继承的子类都可以使用父类的变量和方法
	 * 
	 * 2.格式：
	 * 	父类：public class Bird { }
	 * 	子类：public class 鹰 extends Bird { }
	 * 
	 * 3.方法重写 Override
	 * 	父类的方法的方法体 ，可能不适合某些子类，可以在子类里重写该方法
	 * 	格式：
	 		void fly() {  // 方法头同父类完全一样
				System.out.println("重写了方法，企鹅是走路的");  // 方法体写子类的
			}
	 * 
	 * 4.使用方法就近原则：
	 * 	注意：默认(不写this.super) 优先 使用 本(子)类的方法，本类找不到这个方法，再去父类里找
	 * 
	 * 5.判断 是否为覆盖方法 @Override  *也是告诉别人 这是重写的方法
	 * 	在类的方法前面 加  @Override    报错说明不是
	 * 5.1 Overload、Override
	 * 	重载：方法头(除形参)、方法体，一样，重写形参  （在同一个类里面）
	 *  重写：方法头完全一样，重写方法体  （原方法在父类，重写方法在子类）
	 *  
	 * 6.this.方法  自己类找 ，super.方法  父类找
	 * 
	 * 7.访问权限  子类的重写方法 访问权限一定大于或等于父类的原方法
	 * 
	 * 8.关于super
	 * 	8.1 Jvm运行，先判断 当前类 有没有父类，有 -> 父类.class到方法区 -> 子类.class -> 堆 开辟 父类空间 -> 堆 开辟 子类空间 (子类的super值 指向 父类空间)
	 * 	8.2	子类 创建，默认 第一行 首先调用 父类构造器 super();
	 * 	8.3	使用 父类的构造器    一定把 super(); 写在方法的第一行
	 * 	8.4	子类 对象 堆中空间里存着  1.自己的地址 	2.变量	3.方法	4.this:自己的地址	5.super:父类的地址
	 * 	8.5	当new一个子类对象，堆会开辟 1个子类空间 + 1个父类空间，子类空间指向new的对象，父类空间不指向任何对象   （只为了被子类空间的super指向自己，当子类空间被gc清理，这个父类空间也会被gc清理）
	 * 
	 * 9.toString 是所有类继承的Object类的一个方法， source里 toString,print变量名  就打印出对象的所有值
	 * 
	 * 10.当属性属于父类，想用子类对象进行赋值时，子类构造器内部的第一行一定是调用了父类构造器赋值的。
	 * 
	 */

public class 使用继承 {
	
	

	public static void main(String[] args) {

		Bird an1 = new 鹰();
		an1.fly();
		
		Bird an2 = new 企鹅();
		an2.两开花();
		
	}

}
